package com.ruoyi.sbgl.sbxxgl.controller;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.echarts.EChartsBt;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.sbgl.sbxxgl.domain.Sbxxgl;
import com.ruoyi.sbgl.sbxxgl.domain.SbxxglFj;
import com.ruoyi.sbgl.sbxxgl.service.ISbxxglService;
import com.ruoyi.sbgl.sbxxgl.vo.SbZtCountVo;
import com.ruoyi.sbgl.sbxxgl.vo.SbZtVo;
import com.ruoyi.sbgl.sbxxgl.vo.UserDlVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 设备信息管理Controller
 *
 * @author huacai
 * @date 2024-09-09
 */
@Api(value = "设备信息管理", tags = "设备信息管理")
@RestController
@RequestMapping("/sbgl/sbxxgl")
public class SbxxglController extends BaseController {
    @Resource
    private ISbxxglService sbxxglService;

    /**
     * 查询设备信息管理列表
     */
    @ApiOperation("查询设备信息管理列表")
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:list')")
    @GetMapping("/list")
    public TableDataInfo list(Sbxxgl sbxxgl) {
        startPage();
        List<Sbxxgl> list = sbxxglService.selectSbxxglList(sbxxgl);
        return getDataTable(list);
    }

    /**
     * 查询送检预警列表
     */
    @ApiOperation("查询送检预警列表")
    @GetMapping("/sjyj/list")
    public TableDataInfo selectSjyjList(Sbxxgl sbxxgl) {
        startPage();
        List<Sbxxgl> list = sbxxglService.selectSjyjList(sbxxgl);
        return getDataTable(list);
    }

    /**
     * 导出设备信息管理列表
     */
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:export')")
    @Log(title = "设备信息管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, Sbxxgl sbxxgl) {
        List<Sbxxgl> list = sbxxglService.selectSbxxglList(sbxxgl);
        ExcelUtil<Sbxxgl> util = new ExcelUtil<Sbxxgl>(Sbxxgl.class);
        util.exportExcel(response, list, "设备信息管理数据");
    }

    /**
     * 下载模板
     */
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) {
        ExcelUtil<Sbxxgl> util = new ExcelUtil<Sbxxgl>(Sbxxgl.class);
        util.importTemplateExcel(response, "设备信息管理数据");
    }

    /**
     * 导入数据
     */
    @Log(title = "设备信息管理", businessType = BusinessType.IMPORT)
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:import')")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) throws Exception {
        ExcelUtil<Sbxxgl> util = new ExcelUtil<Sbxxgl>(Sbxxgl.class);
        InputStream inputStream = file.getInputStream();
        List<Sbxxgl> list = util.importExcel(inputStream);
        // 对导入的数据进行处理
        for (Sbxxgl sbxxgl : list) {
            sbxxgl.setSbxxglId(IdUtils.fastSimpleUUID());
            sbxxgl.setIdWhere("存在");
            sbxxgl.setDeptId(Math.toIntExact(getDeptId()));
            sbxxgl.setUserId(Math.toIntExact(getUserId()));
            sbxxgl.setCreateBy(getUsername());
        }
        inputStream.close();
        int count = sbxxglService.batchInsertSbxxgl(list);
        return AjaxResult.success("导入成功" + count + "条信息！");
    }

    /**
     * 获取设备信息管理详细信息
     */
    @ApiOperation("获取设备信息管理详细信息")
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:query')")
    @GetMapping(value = "/{sbxxglId}")
    public AjaxResult getInfo(@PathVariable("sbxxglId") String sbxxglId) {
        return success(sbxxglService.selectSbxxglBySbxxglId(sbxxglId));
    }

    /**
     * 新增设备信息管理
     */
    @ApiOperation("新增设备信息管理")
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:add')")
    @Log(title = "设备信息管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody Sbxxgl sbxxgl) {
        //用户ID
        sbxxgl.setUserId(Math.toIntExact(getUserId()));
        //部门ID
        sbxxgl.setDeptId(Math.toIntExact(getDeptId()));
        sbxxgl.setIdWhere("存在");
        return toAjax(sbxxglService.insertSbxxgl(sbxxgl));
    }

    /**
     * 修改设备信息管理
     */
    @ApiOperation("修改设备信息管理")
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:edit')")
    @Log(title = "设备信息管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody Sbxxgl sbxxgl) {
        sbxxgl.setUpdateBy(getUsername());
        return toAjax(sbxxglService.updateSbxxgl(sbxxgl));
    }

    /**
     * 删除设备信息管理
     */
    @ApiOperation("删除设备信息管理")
    @PreAuthorize("@ss.hasPermi('sbgl:sbxxgl:remove')")
    @Log(title = "设备信息管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{sbxxglIds}")
    public AjaxResult remove(@PathVariable String[] sbxxglIds) {
        return toAjax(sbxxglService.deleteSbxxglBySbxxglIds(sbxxglIds));
    }

    /**
     * 获得ID
     */
    @GetMapping("/getSbXxId")
    public AjaxResult getSbXxId() {
        String sbXxId = IdUtils.fastSimpleUUID();
        return success(sbXxId);
    }

    /**
     * 新增附件
     */
    @PostMapping("/add/File/By/subId")
    public AjaxResult insertSbXxGlFjBysbxxglId(@RequestBody SbxxglFj sbxxglFj) {
        return toAjax(sbxxglService.insertSbXxGlFjBysbxxglId(sbxxglFj));
    }

    /**
     * 根据设备表ID查询子表附件列表
     */
    @ApiOperation("根据设备表ID查询子表附件列表")
    @GetMapping("/get/FileList/By/subId")
    public AjaxResult selectSbXxGlFjList(String sId) {
        SbxxglFj sbxxglFj = new SbxxglFj();
        sbxxglFj.setSbxxglId(sId);
        return AjaxResult.success(sbxxglService.selectSbXxGlFjList(sbxxglFj));
    }

    /**
     * 删除设备信息管理附件
     */
    @Log(title = "删除设备信息管理附件", businessType = BusinessType.DELETE)
    @DeleteMapping("/fj/{fjIds}")
    public AjaxResult deleteSbFj(@PathVariable Integer[] fjIds) {
        return toAjax(sbxxglService.deleteSbxxglFjByFjIds(fjIds));
    }

    /**
     * 查询设备状态数
     * @param sbZtCountVo
     * @return
     */
    @GetMapping("/sbzt/count")
    public AjaxResult selectSbZtCount(SbZtCountVo sbZtCountVo) {
        return success(sbxxglService.selectSbZtCount(sbZtCountVo));
    }

    /**
     * 大屏 设备状态图
     */
    @GetMapping("/getSbZtBt")
    public AjaxResult getSbZtBt() {
        List<EChartsBt> result = new ArrayList<>();

        SbZtVo sbZtVo = sbxxglService.getSbZtBt();

        EChartsBt eChartsBt1 = new EChartsBt();
        eChartsBt1.setName("正常使用");
        eChartsBt1.setValue(sbZtVo.getZcSy());
        result.add(eChartsBt1);

        EChartsBt eChartsBt2 = new EChartsBt();
        eChartsBt2.setName("停用");
        eChartsBt2.setValue(sbZtVo.getTy());
        result.add(eChartsBt2);

        EChartsBt eChartsBt3 = new EChartsBt();
        eChartsBt3.setName("报废");
        eChartsBt3.setValue(sbZtVo.getBf());
        result.add(eChartsBt3);

        return success(result);
    }

    /**
     * 查询登录次数最多的前5个人和次数
     */
    @GetMapping("/selectUserByDl")
    public AjaxResult selectUserByDl() {
        List<EChartsBt> result = new ArrayList<>();

        List<UserDlVo> userDlVos = sbxxglService.selectUserByDl();
        for (UserDlVo userDlVo : userDlVos) {
            EChartsBt eChartsBt = new EChartsBt();
            eChartsBt.setName(userDlVo.getUserName());
            eChartsBt.setValue(userDlVo.getLoginCount());
            result.add(eChartsBt);
        }

        return success(result);
    }



}
